Many modern appliances, consumer devices, and other devices include embedded systems that are configured to perform one or more dedicated functions. Frequently, developers of the embedded systems develop patches to update firmware for the embedded system to fix bugs and/or add new functionality.
Updates to computer software and to firmware can be delivered as patches. A patch is not a complete piece of software or firmware. Instead, a patch describes a set of changes that will turn one version of software or firmware into another. This process of taking an original piece of code and applying the patch is called patching. When source files change, a common change is to add some new instructions in. The effect of this is that all the functions and data that are after the added instructions will have a different offset inside the executable file. Instructions that reference these memory locations, e.g. a function call, typically then have to be changed from original version for the patched version. As a result, patches are frequently nearly the size of the original executable. For resource-constrained devices such as embedded systems, the extra memory capacity used by the patch can be restrictive and impair the ability to make patches on such devices.